package com.atguigu.h_areacode;
/*
    构造代码块的执行时机 :
        1. 每当对象创建时就执行一次,优先于构造方法执行
        2. 如果有继承关系, 子类对象创建时,虚拟父类对象也产生了,那么父类中的构造代码块也要执行 [优先于子类执行]

    构造代码块的使用场景 : 为对象的创建做准备

    对象 : 皇帝  构造代码块 : 宫女太监

    静态代码块的执行时机 :
        1. 当类第一次使用时静态代码块执行一次且只执行一次 !
        2. 在继承关系下,父类的静态代码块优先于子类静态代码块执行 !

    静态代码块的使用场景 : 为类的加载做准备 //类的驱动
 */
public class Demo {
    public static void main(String[] args) {
        Son son = new Son();
    }
}


class Father{
    static{
        //静态代码块
        System.out.println("父类的静态代码块执行了 ! ");
    }
    {
        System.out.println("父类的构造代码块执行了 ! ");
    }

    public Father(){
        System.out.println("Father的无参构造执行了 ! ");
    }
}

class Son extends Father{
    static{
        //静态代码块
        System.out.println("子类的静态代码块执行了 ! ");
    }

    {
        //成员位置的代码块 : 构造代码块
        System.out.println("子类的构造代码块执行了 ! ");
    }

    public Son(){
        super();
        System.out.println("Son的无参构造执行了 ! ");
    }
}